package cn.iocoder.yudao.module.eval.service.score;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.eval.controller.admin.score.vo.EvalScoreRecordPageReqVO;
import cn.iocoder.yudao.module.eval.controller.admin.score.vo.EvalScoreRecordSaveReqVO;
import cn.iocoder.yudao.module.eval.dal.dataobject.score.EvalScoreRecordDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 评分记录 Service 接口
 *
 * @author 芋道源码
 */
public interface EvalScoreRecordService {

    /**
     * 创建评分记录
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createScoreRecord(@Valid EvalScoreRecordSaveReqVO createReqVO);

    /**
     * 更新评分记录
     *
     * @param updateReqVO 更新信息
     */
    void updateScoreRecord(@Valid EvalScoreRecordSaveReqVO updateReqVO);

    /**
     * 删除评分记录
     *
     * @param id 编号
     */
    void deleteScoreRecord(Long id);

    /**
     * 获得评分记录
     *
     * @param id 编号
     * @return 评分记录
     */
    EvalScoreRecordDO getScoreRecord(Long id);

    /**
     * 获得评分记录分页
     *
     * @param pageReqVO 分页查询
     * @return 评分记录分页
     */
    PageResult<EvalScoreRecordDO> getScoreRecordPage(EvalScoreRecordPageReqVO pageReqVO);

    /**
     * 获得评分记录列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 评分记录列表
     */
    List<EvalScoreRecordDO> getScoreRecordList(EvalScoreRecordPageReqVO exportReqVO);

    /**
     * 根据计划ID和科目ID获得评分记录列表
     *
     * @param planId 计划ID
     * @param subjectId 科目ID
     * @return 评分记录列表
     */
    List<EvalScoreRecordDO> getScoreRecordListByPlanAndSubject(Long planId, Long subjectId);

    /**
     * 根据计划ID和参评人员ID获得评分记录列表
     *
     * @param planId 计划ID
     * @param candidateId 参评人员ID
     * @return 评分记录列表
     */
    List<EvalScoreRecordDO> getScoreRecordListByPlanAndCandidate(Long planId, Long candidateId);

    /**
     * 批量创建评分记录
     *
     * @param scoreRecords 评分记录列表
     */
    void batchCreateScoreRecords(List<EvalScoreRecordSaveReqVO> scoreRecords);

}
